#pragma once

/* 假的层 */
#include <metalc/base/mlayer.h>

#define fake_printf(...)   
// DECL_MLAYER_FUNC(fake);

// /* 占用的tls对象指针个数 */
// DEF_MLAYER_OBJNR(fake, 0)

SAI void _fake_pinit(const mlfunc_t * cont){
	PARAM_USED(cont);
	INFO("fake pinit\n");
}
SAI void _fake_tinit(const mlfunc_t * cont){
	PARAM_USED(cont);
	INFO("fake tinit\n");
}
SAI void *_fake_alloc(mreq_t *req, const mlfunc_t * cont){
	if (req->size >= 64)
		return cont->lalloc(req);
	else
		return cont->lalloc(req);
}
SAI bool_t _fake_free(mreq_t *req, const mlfunc_t * cont){
	if (req->ptr)
		return cont->lfree(req);
	else
		return cont->lfree(req);
}
SAI size_t _fake_sizeof(mreq_t *req, const mlfunc_t * cont){
	if (req->ptr == 0){
		return cont->lsizeof(req);
	}
	return cont->lsizeof(req);
}

#define DEF_FAKE_MLAYER(name)	\
DEF_MLAYER_BASIC(name, -1, 0) \
SAI void name##_pinit(const mlfunc_t * cont){ return _fake_pinit(cont);}\
SAI void name##_tinit(const mlfunc_t * cont){ return _fake_tinit(cont);}\
SAI void *name##_alloc(mreq_t *req, const mlfunc_t * cont){ return _fake_alloc(req, cont); }\
SAI bool_t name##_free(mreq_t *req, const mlfunc_t * cont){ return _fake_free(req, cont); }\
SAI size_t name##_sizeof(mreq_t *req, const mlfunc_t * cont){ return _fake_sizeof(req, cont);}
